﻿using System;
using System.ComponentModel;

using Bootstrap5.Abstractions;

namespace Bootstrap5;

/// <summary>
/// The main color.
/// </summary>
public enum Color
{
    Primary,
    Secondary,
    Info,
    Danger,
    Success,
    Warning,
    Dark,
    Light,
}

/// <summary>
/// The background color.
/// </summary>
public enum BgColor
{
    Primary,
    Secondary,
    Info,
    Danger,
    Success,
    Warning,
    Dark,
    Light,
    Body,
    White,
    Transparent,
}


/// <summary>
/// 文本颜色
/// </summary>
public enum TextColor
{
     Primary,
    Secondary,
    Info,
    Danger,
    Success,
    Warning,
    Light,
    Body,
    Muted,
    Dark,
    [CssClass("black-50")]Black50,
    White,
    [CssClass("white-50")]White50,
}

/// <summary>
/// 响应式的断点。
/// </summary>
public enum BreakPoint
{
    /// <summary>
    /// 宽度小于 576px 的设备。
    /// </summary>
    [CssClass("xs")] XS,
    /// <summary>
    /// 宽度在 576px - 768px 的设备。
    /// </summary>
    [CssClass("sm")] SM,
    /// <summary>
    /// 宽度在 768px - 992px 的设备。
    /// </summary>
    [CssClass("md")] MD,
    /// <summary>
    /// 宽度在 992px - 1200px 的设备。
    /// </summary>
    [CssClass("lg")] LG,
    /// <summary>
    /// 宽度在 1200px - 1400px 的设备。
    /// </summary>
    [CssClass("xl")] XL,
    /// <summary>
    /// 宽度超过 1400px 的设备。
    /// </summary>
    [CssClass("xxl")] XXL,
}

enum Spacing
{
    [CssClass("m")] Margin,
    [CssClass("p")] Padding,
}

/// <summary>
/// 空间的边。
/// </summary>
public enum SpaceSide
{
    [CssClass("t")]Top,
    [CssClass("b")]Bottom,
    [CssClass("s")]Left,
    [CssClass("e")]Right,
    [CssClass("x")]X,
    [CssClass("y")]Y,
}

/// <summary>
/// 空间大小的值。
/// </summary>
public enum SpaceNum
{
    [CssClass("0")] Zero0,
    [CssClass("1")] One1,
    [CssClass("2")] Two2,
    [CssClass("3")] Three3,
    [CssClass("4")] Four4,
    [CssClass("5")] Five5,
    [CssClass("auto")] Auto,
}

public enum Num
{
    [CssClass("1")] One1,
    [CssClass("2")] Two2,
    [CssClass("3")] Three3,
    [CssClass("4")] Four4,
    [CssClass("5")] Five5,
}
public enum FontSize
{
    [CssClass("1")] One1,
    [CssClass("2")] Two2,
    [CssClass("3")] Three3,
    [CssClass("4")] Four4,
    [CssClass("5")] Five5,
    [CssClass("6")] Six6,
}
public enum HeadSize
{
    [CssClass("h1")] H1,
    [CssClass("h2")] H2,
    [CssClass("h3")] H3,
    [CssClass("h4")] H4,
    [CssClass("h5")] H5,
    [CssClass("h6")] H6,
}
public enum DisplaySize
{
    [CssClass("1")] One1,
    [CssClass("2")] Two2,
    [CssClass("3")] Three3,
    [CssClass("4")] Four4,
    [CssClass("5")] Five5,
    [CssClass("6")] Six6,
}

/// <summary>
/// The size.
/// </summary>
public enum Size
{
    /// <summary>
    /// The small size for sm.
    /// </summary>
    [CssClass("sm")] Small,
    /// <summary>
    /// The large size for lg.
    /// </summary>
    [CssClass("lg")] Large
}

public enum FlexOrientation
{
    Row,
    Column
}
public enum JustifyContent
{
    Start,
    End,
    Center,
    Around,
    Between,
    Evenly
}
public enum AlignItemsOrSelf
{
    Start,
    End,
    Center,
    Baseline,
    Stretch,
}

public enum AlignContent
{
    Start,
    End,
    Center,
    Around,
    Stretch,
}

public enum FlexOrder
{

    [CssClass("first")] First,
    [CssClass("1")] One1,
    [CssClass("2")] Two2,
    [CssClass("3")] Three3,
    [CssClass("4")] Four4,
    [CssClass("5")] Five5,
    [CssClass("last")] Last,
}

enum FlexGrowShrink
{
    [CssClass("grow-0")] Grow0,
    [CssClass("grow-1")] Grow1,
    [CssClass("shrink-0")] Shrink0,
    [CssClass("shrink-1")] Shrink1,
}

enum FlexWrap
{
    Wrap,
    NoWrap
}
public enum FlexAlignment
{
    [CssClass("justify-content")]JustifyContent,
    [CssClass("align-items")]AlignItems,
    [CssClass("align-self")]AlignSelf,
    [CssClass("align-content")]AlignContent
}

enum GridSize
{
    [CssClass("0")] Is0,
    [CssClass("1")]Is1,
    [CssClass("2")]Is2,
    [CssClass("3")]Is3,
    [CssClass("4")]Is4,
    [CssClass("5")]Is5,
    [CssClass("6")]Is6,
    [CssClass("7")]Is7,
    [CssClass("8")]Is8,
    [CssClass("9")] Is9,
    [CssClass("10")] Is10,
    [CssClass("11")] Is11,
    [CssClass("12")] Is12,
    [CssClass("auto")]Auto,
}

[Flags]
public enum DisplayType
{
    None,
    Inline,
    Block,
    [CssClass("inline-block")]InlineBlock,
    Grid,
    Table,
    [CssClass("table-row")]TableRow,
    [CssClass("table-cell")]TableCell,
    Flex,
    [CssClass("inline-flex")]InlineFlex
}

enum GridType
{
    [CssClass("row-cols")]RowCol,
    [CssClass("col")]Column,
    [CssClass("offset")]Offset
}
public enum Position
{
    Relative,
    Absolute,
    Fixed,
    Static,
    Sticky,
}
public enum PositionKey
{
    [CssClass("top")]Top,
    [CssClass("start")]Start,
    [CssClass("end")]End,
    [CssClass("bottom")]Bottom
}
public enum PositionValue
{
    [CssClass("0")]Is0,
    [CssClass("50")]Is50,
    [CssClass("100")]Is100,
}

public enum Side
{
    X,
    Y
}

/// <summary>
/// 可见性
/// </summary>
public enum Visibility
{
    /// <summary>
    /// 可见
    /// </summary>
    Visible,
    /// <summary>
    /// 不可见
    /// </summary>
    Invisible
}

/// <summary>
/// Text styles.
/// </summary>
public enum Text
{
    Start,
    End,
    Center,
    Break,
    Wrap,
    [CssClass("nowrap")]NoWrap,
    LowerCase,
    UpperCase,
    Muted,
    Capitalize,
    Reset,
    Truncate
}
public enum TextDecoration
{
    [CssClass("underline")] Underline,
    [CssClass("line-through")] LineThrough,
    [CssClass("none")] None
}
public enum FontWeight
{
    Light,
    Lighter,
    Normal,
    Bold,
    Bolder,
}
public enum FontStyle
{
    Italic,
    Normal
}
public enum Shadow
{
    None,
    [CssClass("sm")]Small,
    [CssClass("lg")]Large
}

public enum LengthPercent
{
    [CssClass("25")]Is25,
    [CssClass("50")]Is50,
    [CssClass("75")]Is75,
    [CssClass("100")]Is100,
    [CssClass("auto")]Auto,
}
public enum LengthLimitation
{
    [CssClass("min-v")]Min,
    [CssClass("m")]Max,
    [CssClass("v")]ViewPoint,
}
public enum LineHeight
{
    [CssClass("1")]First,
    Light,
    [CssClass("sm")] Small,
    [CssClass("lg")] Large,
    Base,
}
public enum VerticalAlign
{
    Top,
    Middle,
    Bottom,
    Baseline,
    [CssClass("text-top")]TextTop,
    [CssClass("text-bottom")]TextBottom
}

public enum Overflow
{
    Auto,
    Hidden,
    Visible,
    Scroll
}

public enum UserSelect
{
    None,
    Auto,
    All,
}
public enum PointEvent
{
    None,
    Auto
}
public enum Float
{
    None,
    [CssClass("start")]Left,
    [CssClass("end")]Right,
}

public enum Placement
{
    Top,
    Bottom,
    [CssClass("start")]Left,
    [CssClass("end")]Right
}

public enum DropDownDirection
{
    Up,
    Down,
    [CssClass("start")] Left,
    [CssClass("end")] Right
}
public enum BorderRadius
{
    Top,
    End,
    Bottom,
    Start,
    Circle,
    Pill,
    [CssClass("0")]Zero0,
    [CssClass("1")]One1,
    [CssClass("2")] Two2,
    [CssClass("3")] Three3,
}

public enum ModalSize
{
    [CssClass("sm")]Small,
    [CssClass("lg")]Large,
    [CssClass("xl")]ExtraLarge
}

public enum NavType
{
    [CssClass("tabs")]Tab,
    [CssClass("pills")]Pill
}

public enum NavBarClass
{
    Brand,
    Text,
    Light,
    Dark
}
/// <summary>
/// The placements only has top and bottom.
/// </summary>
public enum UpDownPlacement
{
    Top,
    Bottom
}
/// <summary>
/// The element of button to render.
/// </summary>
public enum ButtonElement
{
    [DefaultValue("button")]Button,
    [DefaultValue("a")]Anchor,
    [DefaultValue("input")]Input
}

/// <summary>
/// The element of list item to render.
/// </summary>
public enum ListGroupItemElement
{
    [DefaultValue("li")] Default,
    [DefaultValue("button")] Button,
    [DefaultValue("a")] Anchor,
}

public enum ToastPlacement
{
    [CssClass("top-0 start-0")]TopLeft,
    [CssClass("top-0 start-50 translate-middle-x")]TopCenter,
    [CssClass("top-0 end-0")]TopRight,
    [CssClass("top-50 start-0 translate-middle-y")]MiddleLeft,
    [CssClass("top-50 start-50 translate-middle")]MiddleCenter,
    [CssClass("top-50 end-0 translate-middle-y")]MiddleRight,
    [CssClass("bottom-0 start-0")]BottomLeft,
    [CssClass("bottom-0 start-50 translate-middle-x")]BottomCenter,
    [CssClass("bottom-0 end-0")]BottomRight,
}